package git.soulbgm.service;

import java.io.IOException;
import java.io.InputStream;
import java.util.LinkedHashMap;
import java.util.List;

/**
 * 数据库表的备份服务
 *
 * @author SoulBGM
 * @date 2022/12/29 15:53
 */
public interface TableBackupService {

    /**
     * 获得需要备份的表名
     *
     * @return {@link String[][]}
     */
    String[][] getBackupTableName();

    /**
     * 备份表数据
     *
     * @param tableNames 表名列表
     * @return {@link byte[]}
     * @throws IOException IO异常
     */
    byte[] backupTableData(List<String> tableNames) throws IOException;

    /**
     * 恢复表数据
     *
     * @param inputStream 输入流
     * @throws IOException IO异常
     */
    void recoveryTableData(InputStream inputStream) throws IOException;

    /**
     * 查询表数据
     *
     * @param tableName 表名
     * @param limit     限制查询数量
     * @param offset    偏移值
     * @return {@link List}<{@link LinkedHashMap}<{@link String}, {@link Object}>>
     */
    List<LinkedHashMap<String, Object>> select(String tableName, int limit, int offset);

    /**
     * 通过SQL获取表名列表
     *
     * @param sql SQL语句
     * @return {@link List}<{@link String}>
     */
    List<String> getTableNames(String sql);

    /**
     * 删除表
     *
     * @param sql SQL语句
     */
    void delete(String sql);

    /**
     * 插入表数据
     *
     * @param sql SQL语句
     */
    void insert(String sql);

}
